package com.ljm.sys.auth.api;

import com.ljm.common.page.PageDto;
import com.ljm.sys.auth.dto.SysAuthRoleDto;
import com.ljm.sys.org.dto.SysOrgUserDto;

import java.util.List;
import java.util.Set;

/**
 * <p>
    * 系统角色 接口
    * </p>
 *
 * @author HuamingChen
 * @since 2019-02-25
 */
public interface SysAuthRoleApi {
    /**
     * 获取用户角色
     *
     * @param userId 用户帐号
     * @return 角色
     * @ 通用异常
     */
    Set<String> getUserRoles(Long userId);

    /**
     * 保存角色
     * @param userDto 用户信息
     * @param roleDto 角色信息
     * @param permissionCodes 拥有角色的信息
     * @ 异常
     */
    void saveData(SysOrgUserDto userDto, SysAuthRoleDto roleDto,
                  List<String> permissionCodes);

    /**
     * 删除角色
     * @param id 主键
     * @ 异常
     */
    void del(Long id);

    /**
     * 获取角色
     * @param id 主键
     * @return 角色信息
     * @ 异常
     */
    SysAuthRoleDto getDataById(Long id);

    /**
     * 分页获取角色
     * @param roleName 角色名称
     * @param roleCode 角色代码
     * @param pageNo 页码
     * @param pageSize 页大小
     * @return 角色数据
     * @ 异常
     */
    PageDto<SysAuthRoleDto> getDataByPage(String roleName, String roleCode,
                                          Integer pageNo, Integer pageSize);

    /**
     * 为角色配置角色
     * @param roleCode 角色名称
     * @param permissions 权限代码
     * @ 异常
     */
    void setSysPermissions(String roleCode, List<String> permissions, SysOrgUserDto userDto);

    /**
     * 指派用户
     * @param roleCode 角色代码
     * @param usesrIds 用户名称
     * @param userDto 用户信息
     * @ 异常
     */
    void handleUserRef(String roleCode, List<Long> usesrIds, SysOrgUserDto userDto);

    /**
     * 获取所有角色
     * @return 所有角色
     */
    List<SysAuthRoleDto> getAllRole(SysOrgUserDto curUser);
}
